/**
 * README
 * 
 * Modificacion de la biblioteca jWave disponible en http://code.google.com/p/jwave/
 * Convertidos los tipos de datos a float para agilizar el tratamiendo de grandes arrays de datos
 * como son los que se tratan en analisis genomicos.
 * Los autores originales de las funciones y del código de la biblioteca cuando fue seleccionada en
 * Abril de 2012 eran:
 *        Christian Scheiblich
 *        Thomas Leduc
 *        sashi
 *        Pol Kennel
 *        Thomas Haider
 *        
 * Por supuesto, todo el merito, honores y demas menciones sobre esta adaptacion les corresponden a ellos
 * y nada mas que a ellos.
 * 
 * 
 * This is a modified version of jWave, available in http://code.google.com/p/jwave/
 * It has been replace the double datatype with float for performance reasons in very big arrays used in
 * bioinformatics like genomic analysis.
 * Original authors of functions and the library when it has been selected in 2012's April were:
 *        Christian Scheiblich
 *        Thomas Leduc
 *        sashi
 *        Pol Kennel
 *        Thomas Haider
 *        
 * Of course, all the merits and mentions about this adaptation have corresponded to them.
 * 
 */

package ev.maths.handlers.wavelets;

/**
 * Wavelet ortonormal de Ingrid Daubechies con 8 coeficientes y escalas normalizado a
 * raíz de 2, normal euclídea.
 * 
 * @date 01.08.2012
 * @author Enrique Vázquez de Luis
 */
public class Daub04 extends Wavelet {

  /**
   * Constructor que inicializa los coeficientes y las escalas.
   * 
   * @date 01.08.2012
   * @author Enrique Vázquez de Luis
   */
  public Daub04( ) {

    _waveLength = 8;

    _scales = new float[ _waveLength ];

    float sqrt02 = (float)Math.sqrt( 2. );

    _scales[ 0 ] = (float) 0.32580343; //  0.32580343
    _scales[ 1 ] = (float) 1.01094572; //  1.01094572
    _scales[ 2 ] = (float) 0.8922014; //  0.8922014
    _scales[ 3 ] = (float) -0.03967503; // -0.03967503
    _scales[ 4 ] = (float) -0.2645071; // -0.2645071
    _scales[ 5 ] = (float) 0.0436163; //  0.0436163
    _scales[ 6 ] = (float) 0.0465036; //  0.0465036
    _scales[ 7 ] = (float) -0.01498699; // -0.01498699

    for( int i = 0; i < _waveLength; i++ )
      _scales[ i ] /= sqrt02;

    _coeffs = new float[ _waveLength ];

    _coeffs[ 0 ] = _scales[ 7 ]; //  h7
    _coeffs[ 1 ] = -_scales[ 6 ]; // -h6
    _coeffs[ 2 ] = _scales[ 5 ]; //  h5
    _coeffs[ 3 ] = -_scales[ 4 ]; // -h4
    _coeffs[ 4 ] = _scales[ 3 ]; //  h3
    _coeffs[ 5 ] = -_scales[ 2 ]; // -h2
    _coeffs[ 6 ] = _scales[ 1 ]; //  h1
    _coeffs[ 7 ] = -_scales[ 0 ]; // -h0

  } // Daub04

} // class
